public class binaryTree {
    // Definition for a binary tree node.
     public class TreeNode {
     int val;
         TreeNode left;
         TreeNode right;
         TreeNode(int x) { val = x; }
     }

        public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
            if (root == null)  return root;
            if (root == p || root == q)  return root;

            TreeNode leftTree = lowestCommonAncestor(root.left, p, q);
            TreeNode rightTree = lowestCommonAncestor(root.right, p, q);

            if (leftTree != null && rightTree != null) return root;
            else if (leftTree != null) return leftTree;
            else return rightTree;
        }
}
